﻿using System;

namespace WebFabricator.org.Composition
{
    /// <summary>
    /// Endpoints represnt a metadata store that stores the values of namespace scoped variables that are used by participants in the Tapestry processing
    /// pipeline to produce an output in response to a request. This interface defines the sematics used to interact with this metadata store.
    /// </summary>
    public interface IEndpointValueProvider
    {
        System.Xml.XPath.XPathNavigator CreateNavigator();
        System.Collections.Generic.IDictionary<string, string> GetNamespacesInScope(global::System.Xml.XmlNamespaceScope scope);
        void GetObjectData(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context);
        string LookupNamespace(string namespaceName);
        string LookupPrefix(string prefix);
        System.Collections.Generic.IEnumerable<global::System.Xml.Linq.XElement> Read(Predicate<global::System.Xml.Linq.XElement> predicate);
        System.Collections.Generic.IEnumerable<global::System.Xml.Linq.XElement> Read(string namespaceName);
        System.Collections.Generic.IEnumerable<global::System.Xml.Linq.XElement> Read(string namespaceName, Predicate<global::System.Xml.Linq.XElement> predicate);
        System.Collections.Generic.IEnumerable<string> Read(string namespaceName, string name);
        void Remove(Predicate<global::System.Xml.Linq.XElement> predicate);
        void Remove(string namespaceName);
        void Remove(string namespaceName, Predicate<global::System.Xml.Linq.XElement> predicate);
        void Remove(string namespaceName, string name);
        System.Collections.Generic.IEnumerable<string> this[string namespaceName, string name] { get; set; }
        void Write(string namespaceName, string name, string value);
        void Write(string namespaceName, string name, string[] values);
        void Write(global::System.Xml.Linq.XElement element);
    }
}
